Python dataclasses

dataclassesPython 3.7 中引入的一个模块,它提供了一个装饰器和一些函数,用于自动化地创建特殊方法,如 __init__()__repr__(),以减少样板代码。

主要特性:

基础用法

@dataclasses.dataclass
class Point:
    x: int
    y: int

以上代码为 Point 类自动生成了 __init__, __repr____eq__ 等方法。

常用参数

Field 对象

使用 dataclasses.field() 可以为特定字段设置默认值或其他特性。

@dataclasses.dataclass
class Point:
    x: int
    y: int = dataclasses.field(default=0)

使用场景

当你需要一个简单的类,主要用于存储数据,并希望自动为其生成常用的特殊方法时,dataclasses 是一个非常有用的工具。

默认值和默认工厂方法

@dataclasses.dataclass
class InventoryItem:
    name: str
    unit_price: float = 0.0
    quantity_on_hand: int = 
	    dataclasses.field(default_factory=list)

item = InventoryItem("apple")

不可变对象 (Frozen)

@dataclasses.dataclass(frozen=True)
class Point:
    x: int
    y: int

p = Point(1, 2)
# p.x = 3  # 这会引发一个错误,因为对象是不可变的

生成比较方法

@dataclasses.dataclass(order=True)
class Student:
    grade: int
    name: str

alice = Student(90, "Alice")
bob = Student(85, "Bob")
print(alice > bob)  # 输出: True

忽略某些字段的比较

@dataclasses.dataclass
class WithUnrelated:
    value: int
    transient: int = dataclasses.field(compare=False)

a = WithUnrelated(1, 100)
b = WithUnrelated(1, 200)
print(a == b)  # 输出: True,因为 `transient` 字段在比较时被忽略了

本文作者:Maeiee

本文链接:Python dataclasses

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!